package com.xbongbong.pro.statistic.service;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import com.xbongbong.pro.domain.entity.ChartCategoryEntity;
import com.xbongbong.pro.statistic.pojo.dto.CategoryFieldGetDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategoryPermissionSaveDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategoryPublishDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategorySearchGetDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategorySearchGetListDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategorySearchSaveBatchDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategorySearchSaveDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategoryTextGetDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategoryTextGetListDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategoryTextSaveBatchDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategoryTextSaveDTO;
import com.xbongbong.pro.statistic.pojo.dto.CategoryUpgradeDTO;
import com.xbongbong.pro.statistic.pojo.ChartCategoryQueryPojo;
import com.xbongbong.pro.statistic.pojo.dto.ChartCategoryDeleteDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartCategoryEnableDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartCategoryFormDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartCategoryGetDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartCategoryInitDTO;
import com.xbongbong.pro.statistic.pojo.vo.CategoryTextGetListVO;
import com.xbongbong.pro.statistic.pojo.vo.CategoryTextGetVO;
import com.xbongbong.pro.statistic.pojo.vo.CategoryTextVO;
import com.xbongbong.pro.statistic.result.pojo.dto.ChartCategoryListByIdInDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartCategoryListDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartCategorySaveDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartCategorySortDTO;
import com.xbongbong.pro.statistic.pojo.dto.ChartMobileCategoryListDTO;
import com.xbongbong.pro.statistic.pojo.vo.CategoryFieldGetVO;
import com.xbongbong.pro.statistic.pojo.vo.CategorySearchGetListVO;
import com.xbongbong.pro.statistic.pojo.vo.CategorySearchGetVO;
import com.xbongbong.pro.statistic.pojo.vo.CategorySearchVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartCategoryDeleteVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartCategoryEnableVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartCategoryFormVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartCategoryGetVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartCategoryIndexListVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartCategoryInitVO;
import com.xbongbong.pro.statistic.result.pojo.vo.ChartCategoryListByIdInVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartCategoryListVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartCategorySaveVO;
import com.xbongbong.pro.statistic.pojo.vo.ChartCategorySortVO;

import java.util.List;

/**
 * 报表分类相关
 *
 * @author zcp
 * @date 2019/1/11
 * @since v1.0
 * @version v1.0
 */
public interface ChartCategoryService {

    /**
     * 获取分类列表
     * @param chartCategoryQueryPojo 入参
     * @return java.util.List<com.xbongbong.pro.domain.entity.ChartCategoryEntity>
     * @author zcp
     * @date 2019/1/14 19:13
     * @since v1.0
     * @version v1.0
     */
    List<ChartCategoryEntity> getChartCategoryList(ChartCategoryQueryPojo chartCategoryQueryPojo);

    /**
     * 首页左侧菜单展示----图表中心二级分组下的图表也要渲染进来
     * @param chartCategoryListDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartCategoryIndexListVO
     * @throws XbbException
     * @author zcp
     * @date 2019/1/11 20:41
     * @since v1.0
     * @version v1.0
     */
    ChartCategoryIndexListVO chartCategoryIndexList(ChartCategoryListDTO chartCategoryListDTO) throws XbbException;

    /**
     * 图表中心左侧菜单展示
     * @param chartCategoryListDTO
     * @return java.util.List<com.xbongbong.pro.statistic.pojo.vo.ChartCategoryListVO>
     * @throws XbbException
     * @author zcp
     * @date 2019/1/14 19:21
     * @since v1.0
     * @version v1.0
     */
    ChartCategoryListVO chartCategoryList(ChartCategoryListDTO chartCategoryListDTO) throws XbbException;

    /**
     * 图表中心pk榜特殊模版筛选
     * @param chartCategoryFormDTO
     * @return java.util.List<com.xbongbong.pro.statistic.pojo.vo.ChartCategoryListVO>
     * @throws XbbException
     * @author youli.chen
     * @date 2019/1/14 19:21
     * @since v1.0
     * @version v1.0
     */
    ChartCategoryFormVO chartCategoryForm(ChartCategoryFormDTO chartCategoryFormDTO) throws XbbException;

    /**
     * 获取单个分组信息
     * @param chartCategoryGetDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartCategoryGetVO
     * @throws XbbException
     * @author zcp
     * @date 2019/1/14 19:58
     * @since v1.0
     * @version v1.0
     */
    ChartCategoryGetVO chartCategoryGet(ChartCategoryGetDTO chartCategoryGetDTO) throws XbbException;

    /**
     * 新建/编辑分组
     * @param chartCategoryGetDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartCategoryGetVO
     * @throws XbbException
     * @author zcp
     * @date 2019/1/14 19:58
     * @since v1.0
     * @version v1.0
     */
    ChartCategoryGetVO chartCategoryEdit(ChartCategoryGetDTO chartCategoryGetDTO) throws XbbException;

    /**
     * 分组保存
     * @param chartCategorySaveDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartCategorySaveVO
     * @throws XbbException
     * @author zcp
     * @date 2019/1/15 9:34
     * @since v1.0
     * @version v1.0
     */
    ChartCategorySaveVO chartCategorySave(ChartCategorySaveDTO chartCategorySaveDTO) throws XbbException;

    /**
     * 删除分组----分组内有子分类、有图表的不能删除
     * @param chartCategoryDeleteDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartCategoryDeleteDTO
     * @throws XbbException
     * @author zcp
     * @date 2019/1/15 20:44
     * @since v1.0
     * @version v1.0
     */
    ChartCategoryDeleteVO chartCategoryDelete(ChartCategoryDeleteDTO chartCategoryDeleteDTO) throws XbbException;

    /**
     * 开关分组
     * @param chartCategoryEnableDTO
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartCategoryEnableVO
     * @throws XbbException
     * @author zcp
     * @date 2019/1/16 15:13
     * @since v1.0
     * @version v1.0
     */
    ChartCategoryEnableVO chartCategoryEnable(ChartCategoryEnableDTO chartCategoryEnableDTO) throws XbbException;

    /**
     * 分组排序
     * @param chartCategorySortDTO
     * @return com.xbongbong.pro.statistic.pojo.dto.ChartCategorySortDTO
     * @throws XbbException
     * @author zcp
     * @date 2019/1/16 20:15
     * @since v1.0
     * @version v1.0
     */
    ChartCategorySortVO chartCategorySort(ChartCategorySortDTO chartCategorySortDTO) throws XbbException;
    /**
     * 移动端分组列表（只有一级分类及收藏图表栏目）
     * @param chartMobileCategoryListDTO
     * @return java.util.List<com.xbongbong.pro.statistic.pojo.vo.MobileChartCategoryListVO>
     * @throws XbbException
     * @author zcp
     * @date 2019/1/25 20:48
     * @since v1.0
     * @version v1.0
     */
    List<ChartCategoryListVO> chartMobileCategoryList(ChartMobileCategoryListDTO chartMobileCategoryListDTO) throws XbbException;

    /**
     * 报表分类初始化
     *
     * @param chartCategoryInitDTO 入参
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartCategoryInitVO
     * @throws XbbException 父类异常
     * @author 徐俊杰
     * @date 2019/1/23 15:23
     */
    ChartCategoryInitVO chartCategoryInit(ChartCategoryInitDTO chartCategoryInitDTO) throws XbbException;

    /**
     * 分类和图表初始化，并且获取分类和图表的列表
     *
     * @param chartCategoryInitDTO 入参（包含corpid）
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartInitVO
     * @throws XbbException 初始化图表异常
     * @author 徐俊杰
     * @date 2019/4/3 11:33
     * @since v1.0
     */
    ChartCategoryInitVO categoryAndChartInit(ChartCategoryInitDTO chartCategoryInitDTO) throws XbbException;

    /**
     * 呼叫中心的一级分类及二级分类
     *
     * @param baseDTO 入参(corpid)
     * @return com.xbongbong.pro.statistic.pojo.vo.ChartCategoryListVO
     * @author 徐俊杰
     * @date 2019/6/24 16:04
     * @since v1.0
     */
    ChartCategoryListVO callCenterLink(BaseDTO baseDTO);

    /**
     * 仪表盘中查询条件保存
     * @param categorySearchSaveDTO 入参
     * @return 回参
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/8/24 13:47
     */
    CategorySearchVO categorySearchSaveBatch(CategorySearchSaveDTO categorySearchSaveDTO) throws XbbException;

    /**
     * 仪表盘中查询条件更新
     * @param categorySearchSaveBatchDTO 入参
     * @return 回参
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/8/24 13:47
     */
    CategorySearchVO categorySearchUpdateBatch(CategorySearchSaveBatchDTO categorySearchSaveBatchDTO) throws XbbException;

    /**
     * 分类单个查询条件获取
     * @param categorySearchGetDTO 入参
     * @return 查询条件详情
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/9/3 10:29
     */
    CategorySearchGetVO categorySearchGet(CategorySearchGetDTO categorySearchGetDTO) throws XbbException;

    /**
     * 分类查询条件获取列表
     * @param categorySearchGetListDTO 入参
     * @return 查询条件详情
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/9/3 10:29
     */
    CategorySearchGetListVO categorySearchGetList(CategorySearchGetListDTO categorySearchGetListDTO) throws XbbException;

    /**
     * 仪表盘中文本组件保存
     * @param categoryTextSaveDTO 入参
     * @return 回参
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/8/24 13:47
     */
    CategoryTextVO categoryTextSaveBatch(CategoryTextSaveDTO categoryTextSaveDTO) throws XbbException;

    /**
     * 分类单个文本组件获取
     * @param categoryTextGetDTO 入参
     * @return 文本组件详情
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/9/3 10:29
     */
    CategoryTextGetVO categoryTextGet(CategoryTextGetDTO categoryTextGetDTO) throws XbbException;

    /**
     * 分类文本组件获取列表
     * @param categoryTextGetListDTO 入参
     * @return 文本组件详情
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/9/3 10:29
     */
    CategoryTextGetListVO categoryTextGetList(CategoryTextGetListDTO categoryTextGetListDTO) throws XbbException;
    /**
     * 仪表盘中权限信息更新
     * @param categoryPermissionSaveDTO 入参
     * @return 回参
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/8/24 13:47
     */
    CategorySearchVO categoryPermissionUpdate(CategoryPermissionSaveDTO categoryPermissionSaveDTO) throws XbbException;

    /**
     * 仪表盘中查询字段获取
     * @param categoryFieldGetDTO 入参
     * @return 回参
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/8/26 14:19
     */
    CategoryFieldGetVO categoryFieldGet(CategoryFieldGetDTO categoryFieldGetDTO) throws XbbException;

    /**
     * 仪表盘发布、撤销发布
     * @param categoryPublishDTO 入参
     * @return 回参
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/9/1 14:05
     */
    CategorySearchVO categoryPublish(CategoryPublishDTO categoryPublishDTO) throws XbbException;

    /**
     * 旧分类升级为仪表盘
     * @param categoryUpgradeDTO 入参
     * @return CategorySearchVO
     * @throws XbbException error
     * @author zhouwq
     * @date 2020/8/25 9:26
     */
    CategorySearchVO categoryUpgrade(CategoryUpgradeDTO categoryUpgradeDTO) throws XbbException;

    /**
     * 根据分类IdIn获取分类
     * @param chartCategoryListByIdInDTO 入参
     * @return 分类信息
     * @throws XbbException error
     */
    ChartCategoryListByIdInVO chartCategoryListByIdIn(ChartCategoryListByIdInDTO chartCategoryListByIdInDTO) throws XbbException;

    /**
     * 获取首页图表数据
     *
     * @param chartCategoryInitDTO 入参
     * @throws
     * @return
     * @author hongxiao
     * @date 2021-01-29 15:51
     * @since
     * @version
     */
    ChartCategoryInitVO getIndexCategoryAndChart(ChartCategoryInitDTO chartCategoryInitDTO) throws XbbException;
}
